package at.ac.univie.zsu.aguataplan.service;

import java.util.List;

import at.ac.univie.zsu.aguataplan.domain.Event;
import at.ac.univie.zsu.aguataplan.domain.EventAttribute;
import at.ac.univie.zsu.aguataplan.domain.EventAttributeValueString;
import at.ac.univie.zsu.aguataplan.exception.DatabaseException;

/**
 * @author gerry
 * 
 */
public interface EventManager {

	public void cleanEventEventAttributeEventAttributeValueString() throws DatabaseException;

	// --------------

	public Event addEvent(String name, String description, String shortcut) throws DatabaseException;

	public void deleteEvent(long id) throws DatabaseException;

	public List<Event> getEventList() throws DatabaseException;

	public Event getEventById(long id) throws DatabaseException;

	public Event mergeEvent(Event event) throws DatabaseException;

	public List<Event> getEventListNonEmpty() throws DatabaseException;

	public List<Event> getEventListNonEmptyAll() throws DatabaseException;

	// --------------

	public EventAttribute addEventAttribute(String name, String shortcut) throws DatabaseException;

	public void deleteEventAttribute(long id) throws DatabaseException;

	public List<EventAttribute> getEventAttributeList() throws DatabaseException;

	public EventAttribute getEventAttributeById(long id) throws DatabaseException;

	public EventAttribute mergeEventAttribute(EventAttribute eventAttribute) throws DatabaseException;

	public List<EventAttribute> getEventAttributeListByEventNonEmpty(Event event) throws DatabaseException;

	// --------------

	public EventAttributeValueString addEventAttributeValueString(String attValue) throws DatabaseException;

	public void deleteEventAttributeValueString(long id) throws DatabaseException;

	public List<EventAttributeValueString> getEventAttributeValueStringList() throws DatabaseException;

	public EventAttributeValueString getEventAttributeValueStringById(long id) throws DatabaseException;

	public EventAttributeValueString mergeEventAttributeValueString(EventAttributeValueString eventAttributeValueString)
			throws DatabaseException;

	public List<EventAttributeValueString> getEventAttributeValueStringListByEventAttribute(
			EventAttribute eventAttribute) throws DatabaseException;

	// --------------

	public void addEventAttributeToEvent(Event event, EventAttribute eventAttribute) throws DatabaseException;

	public void deleteEventAttributeFromEvent(Event event, EventAttribute eventAttribute) throws DatabaseException;

	public void addEventAttributeValueStringtoEventAttribute(EventAttribute eventAttribute,
			EventAttributeValueString eventAttributeValueString) throws DatabaseException;

	public void deleteEventAttributeValueStringFromEventAttribute(EventAttribute eventAttribute,
			EventAttributeValueString eventAttributeValueString) throws DatabaseException;
}
